package com.StaticProxy;
//静态代理 理解线程lambda表达式 ()-> Runnable接口run方法
/*
    静态代理：
*  真实对象和代理对象需实现同一个接口
* 作用：角色分业务 真实对象只做自己的事 代理对象可以做真实对象不能做的事
* */
public class ProxyThread {
    public static void main(String[] args) {
        //声明代理实例 静态代理
//        ProxyMan marry = new ProxyMan(new You());
//        marry.HappyMarry();

        new ProxyMan(new You()).HappyMarry();
        //静态代理模式 -> 推导线程Thread底层原理  此()-> 是run方法 即Thread类
        new Thread(()-> System.out.println("thread-0")).start();
    }
}

interface Marry{
    void HappyMarry();
}
//真实角色
class You implements Marry{
    @Override
    public void HappyMarry() {
        System.out.println("So high is the mood that i will marry with sb");
    }
}
//代理角色
class ProxyMan implements Marry{
    private Marry target;

    public ProxyMan(Marry target) {
        this.target = target;
    }

    @Override
    public void HappyMarry() {
        before();
        this.target.HappyMarry(); //真实对象的事
        after();
    }

    private void before() {
        System.out.println("结婚之前布置");
    }
    private void after() {
        System.out.println("结婚之后收拾");
    }
}
